Representing Instructions

重要觀念 :

ASM     !=      instruction 
人 -----------> processor
    assembler


雖然經常有人說組合語言跟instruction彼此之間是接近的
但是他們兩者還是有很多的不同之處

同學們可以在日後學習到pseudo instruction時
就可以更進一步的發現
assembly langrage跟instruction set其實是有一些差異性的

instruction word :

instruction是由32個bit所組成
而每一個instruction word
我們將會把它分成好幾個不同的"fields"不同的欄位
這些欄位會分別的告訴processor我們需要處理的事情

在MIPS的指令集裡面
我們依據切割不同欄位的方法將指令分為三個不同的format
"R-format, I-format以及J-format"

R-format :

上面的數字代表的是每一個field它裡面實際上需要的bit的個數

kdf1

表格則代表著不同的field以及它每一個所對應的名字

1.opcode

這個opcode它對應的這個指令叫"做的事情是什麼"

注意 : 在MIPS的指令集裡面"所有的R-format指令它的opcode都為0"

2.function

在MIPS的指令集裡面
由於R-format的opcode都為0
因此我們需要搭配了0的opcode再加上function
才能夠決定這個R-format的指令要做的事情是什麼

3.rs (source register)

這個指令所要處理的第一個operand

4.rt (target register)

這個指令所要處理的第二個operand

5.rd (destination register)

這個指令當它處理完成之後結果所需要放入的register



同學們可以注意到
我們在前面所定義的register fields
每一個都只要5個bit就夠了
這是因為在MIPS的指令集裡面
我們總共只有32個register
因此我們只需要5個bit就足以表示這32個不同的register(2^5=32)

6.shamt (shift amount)

提供給shift的指令來使用的

我們都知道在MIPS裡面一個register總共也就只有32個bit
當我們要shift的數量超過31個bit
其實是沒有任何意義的
因為所有的資料都shift光了
這也就是為什麼
我們總共只需要用5個bit就可以明確的去描述我們所需要shift的個數


在MIPS的指令集裡面
任何R type的指令
只要它不是shift的指令
那麼它的shift amount的欄位就會等於0

例子 :

kdf2

instruction它format裡面的順序
跟assembly的順序其實是不一樣的

I-format :

1.opcode

這個opcode它對應的這個指令叫"做的事情是什麼"

注意 : 在MIPS的指令集裡面"所有的R-format指令它的opcode都為0"

3.rs (source register)

這個指令所要處理的operand

4.rt (target register)

這個指令當它處理完成之後結果所需要放入的register

5.immediate

這個指令當它處理完成之後結果所需要放入的register

有負號記的做 2's complement

immediate這個field是由16個bit所組合而成的
也因此它可以表示2的16次方種不同的數值
這些常數在實際處理的時候將會進行sign-extention成為32個bit
於是就可以跟register一起做運算
Design Principle 4 : Good design demands good compromises(好的設計需要好的折衷)

例子一 :

immediate注意負號
記得做signsign-extention

例子二 :

Stored Program

我們可以把這些程式的指令像資料一般儲存在記憶體裡面
當我們需要的時候再把它讀取出來

無論是instruction指令或者是data資料
我們都可以用一個特定的記憶體位址去access它

Program Counter

每一個processor會用一個特殊的暫存器"Program Counter"
去指明現在要執行指令實際上在記憶體的哪一個位址

Intel這間公司把program counter稱做Instruction Address Pointer

好處:

現在需要執行某一個程式:
1.將這個程式把它搬移到記憶體裡
2.透過PC這個register讓他指到我們想要執行的程式
  processor就可以去開始執行我們希望執行的程式

想要執行其他的程式:
  只需要修改PC 這個register的值
  指到我們希望執行的新的程式它所在記憶體的位址
  processor就會自動的去從記憶體裡面取出我們想要執行新的程式開始執行

檔案概念由此而生

results matching ""

    No results matching ""